package com.xspace.android.xafcommon.util;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 本地文件工具类
 * @author Administrator
 * @date 2015-7-3 10:54:25
 */
public class FileUtil {
	/**
	 * 托管文件、应用下载目录
	 */
	public static final String DownloadFileDir="/ctnq/delegate/";
	/**
	 * 打开文件
	 * 
	 * @param file
	 */
	public static void openFile(File file, Context context) {

		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(Intent.ACTION_VIEW);// 设置intent的Action属性
		String type = getMIMEType(file);// 获取文件file的MIME类型
		intent.setDataAndType(/* uri */Uri.fromFile(file), type);// 设置intent的data和Type属性
		context.startActivity(intent);// 跳转

	}

	/**
	 * 根据文件后缀名获得对应的MIME类型
	 * 
	 * @param file
	 */
	private static String getMIMEType(File file) {
		String defaultType = "*/*";
		String fileName = file.getName();
		// 获取后缀名前的分隔符"."在fName中的位置。
		int dotIndex = fileName.lastIndexOf(".");
		if (dotIndex < 0) {
			return defaultType;
		}
		/* 获取文件的后缀名 */
		String fileSuffix = fileName.substring(dotIndex, fileName.length())
				.toLowerCase();
		if ("".equals(fileSuffix))
			return defaultType;
		// 在MIME和文件类型的匹配表中找到对应的MIME类型
		String matchedType = fileTypeMap.get(fileSuffix);
		return matchedType == null ? defaultType : matchedType;
	}

	/**
	 * 声明Map变量
	 */
	private final static Map<String, String> fileTypeMap = new HashMap<String, String>();
	/**
	 * 设置文件类型数据
	 */
	static {
		// key:后缀名,value:MIME类型
		fileTypeMap.put(".3gp", "video/3gpp");
		fileTypeMap.put(".apk", "application/vnd.android.package-archive");
		fileTypeMap.put(".asf", "video/x-ms-asf");
		fileTypeMap.put(".avi", "video/x-msvideo");
		fileTypeMap.put(".bin", "application/octet-stream");
		fileTypeMap.put(".bmp", "image/bmp");
		fileTypeMap.put(".c", "text/plain");
		fileTypeMap.put(".class", "application/octet-stream");
		fileTypeMap.put(".conf", "text/plain");
		fileTypeMap.put(".cpp", "text/plain");
		fileTypeMap.put(".doc", "application/msword");
		fileTypeMap
				.put(".docx",
						"application/vnd.openxmlformats-officedocument.wordprocessingml.document");
		fileTypeMap.put(".xls", "application/vnd.ms-excel");
		fileTypeMap
				.put(".xlsx",
						"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		fileTypeMap.put(".exe", "application/octet-stream");
		fileTypeMap.put(".gif", "image/gif");
		fileTypeMap.put(".gtar", "application/x-gtar");
		fileTypeMap.put(".gz", "application/x-gzip");
		fileTypeMap.put(".h", "text/plain");
		fileTypeMap.put(".htm", "text/html");
		fileTypeMap.put(".html", "text/html");
		fileTypeMap.put(".jar", "application/java-archive");
		fileTypeMap.put(".java", "text/plain");
		fileTypeMap.put(".jpeg", "image/jpeg");
		fileTypeMap.put(".jpg", "image/jpeg");
		fileTypeMap.put(".js", "application/x-javascript");
		fileTypeMap.put(".log", "text/plain");
		fileTypeMap.put(".m3u", "audio/x-mpegurl");
		fileTypeMap.put(".m4a", "audio/mp4a-latm");
		fileTypeMap.put(".m4b", "audio/mp4a-latm");
		fileTypeMap.put(".m4p", "audio/mp4a-latm");
		fileTypeMap.put(".m4u", "video/vnd.mpegurl");
		fileTypeMap.put(".m4v", "video/x-m4v");
		fileTypeMap.put(".mov", "video/quicktime");
		fileTypeMap.put(".mp2", "audio/x-mpeg");
		fileTypeMap.put(".mp3", "audio/x-mpeg");
		fileTypeMap.put(".amr", "audio/x-mpeg");
		fileTypeMap.put(".mp4", "video/mp4");
		fileTypeMap.put(".mpc", "application/vnd.mpohun.certificate");
		fileTypeMap.put(".mpe", "video/mpeg");
		fileTypeMap.put(".mpeg", "video/mpeg");
		fileTypeMap.put(".mpg", "video/mpeg");
		fileTypeMap.put(".mpg4", "video/mp4");
		fileTypeMap.put(".mpga", "audio/mpeg");
		fileTypeMap.put(".msg", "application/vnd.ms-outlook");
		fileTypeMap.put(".ogg", "audio/ogg");
		fileTypeMap.put(".pdf", "application/pdf");
		fileTypeMap.put(".png", "image/png");
		fileTypeMap.put(".pps", "application/vnd.ms-powerpoint");
		fileTypeMap.put(".ppt", "application/vnd.ms-powerpoint");
		fileTypeMap
				.put(".pptx",
						"application/vnd.openxmlformats-officedocument.presentationml.presentation");
		fileTypeMap.put(".prop", "text/plain");
		fileTypeMap.put(".rc", "text/plain");
		fileTypeMap.put(".rmvb", "audio/x-pn-realaudio");
		fileTypeMap.put(".rtf", "application/rtf");
		fileTypeMap.put(".sh", "text/plain");
		fileTypeMap.put(".tar", "application/x-tar");
		fileTypeMap.put(".tgz", "application/x-compressed");
		fileTypeMap.put(".txt", "text/plain");
		fileTypeMap.put(".wav", "audio/x-wav");
		fileTypeMap.put(".wma", "audio/x-ms-wma");
		fileTypeMap.put(".wmv", "audio/x-ms-wmv");
		fileTypeMap.put(".wps", "application/vnd.ms-works");
		fileTypeMap.put(".xml", "text/plain");
		fileTypeMap.put(".z", "application/x-compress");
		fileTypeMap.put(".zip", "application/x-zip-compressed");
		fileTypeMap.put("", "*/*");
	}
	

	public static boolean isImageFile(String name) {
		try {
			// 后缀
			String lower = name.toLowerCase();
			// 如果文件的后缀是jpeg,jpg, png, bmp, gif
			return (lower.endsWith(".jpeg") || lower.endsWith(".jpg")
					|| lower.endsWith(".png") || lower.endsWith(".bmp") || lower
						.endsWith(".gif"));
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/********************************************************************************
	 * 函数名: isAudioFile 编写者: 汪磊 创建时间: 2013-1-18 下午5:04:23 功 能: 根据文件名判断文件是否是音频文件
	 * 输入参数: name, 文件名; 返回值: N/A 最后修改时间:2013-1-18 下午5:04:23 备 注: N/A
	 ********************************************************************************/
	public static boolean isAudioFile(String name) {
		try {
			// 后缀
			String lower = name.toLowerCase();
			return (lower.endsWith(".mp3") || lower.endsWith(".amr"));
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/********************************************************************************
	 * 函数名: isVideoFile 编写者：汪磊 创建时间：2013-3-8 下午3:21:22 功 能: 根据文件名判断文件是否是视频文件
	 * 输入参数：name, 文件名; 返回值： 最后修改时间：2013-3-8 下午3:21:22 备 注：
	 ********************************************************************************/
	public static boolean isVideoFile(String name) {
		try {
			// 后缀
			String lower = name.toLowerCase();
			return (lower.endsWith(".mp4") || lower.endsWith(".rmvb")
					|| lower.endsWith(".3gp") || lower.endsWith(".avi") || lower
						.endsWith(".wmv"));
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/********************************************************************************
	 * 函数名: isDocumentFile 编写者：汪磊 创建时间：2013-3-8 下午3:22:20 功 能: 根据文件名判断文件是否是文档文件
	 * 输入参数：name, 文件名; 返回值： 最后修改时间：2013-3-8 下午3:22:20 备 注：
	 ********************************************************************************/
	public static boolean isDocumentFile(String name) {
		try {
			// 后缀
			String lower = name.toLowerCase();
			return (lower.endsWith(".txt") || lower.endsWith(".doc")
					|| lower.endsWith(".docx") || lower.endsWith(".xls")
					|| lower.endsWith(".xlsx") || lower.endsWith(".ppt")
					|| lower.endsWith(".pptx") || lower.endsWith(".pdf") || lower
						.endsWith(".xml"));
		} catch (NullPointerException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	/**  
     * 复制单个文件  
     * @param oldPath String 原文件路径 如：c:/fqf.txt  
     * @param newPath String 复制后路径 如：f:/fqf.txt  
     * @return boolean  
     */   
   public static void copyFile(String oldPath, String newPath) {   
       try {   
           int bytesum = 0;   
           int byteread = 0;   
           File oldfile = new File(oldPath);   
           if (oldfile.exists()) { //文件存在时   
               InputStream inStream = new FileInputStream(oldPath); //读入原文件   
               FileOutputStream fs = new FileOutputStream(newPath);   
               byte[] buffer = new byte[1444];   
               int length;   
               while ( (byteread = inStream.read(buffer)) != -1) {   
                   bytesum += byteread; //字节数 文件大小   
                  // System.out.println(bytesum);   
                   fs.write(buffer, 0, byteread);   
               }   
               inStream.close();   
           }   
       }   
       catch (Exception e) {   
           System.out.println("复制单个文件操作出错");   
           e.printStackTrace();   
  
       }   
  
   }
	/**
	 * 根据路径获得文件名
	 *
	 * @param imageUrl
	 * @return
	 */
	public static String getImageNameByPath(String imageUrl) {
		String name = imageUrl.substring(imageUrl.lastIndexOf('/') + 1);
		if (TextUtils.isEmpty(name)) {
			name = "";
		}
		return name;
	}
}
